import 'package:get/get.dart';
import 'package:xmshop/app/services/storage.dart';
import '../../../services/cartServices.dart';
import '../../../services/userServices.dart';

class CartController extends GetxController {
  //TODO: Implement CartController

  RxList cartList = [].obs;

  // 全选反选
  RxBool checkedAllBox = false.obs;

  @override
  void onInit() {
    super.onInit();
  }

  @override
  void onClose() {
    super.onClose();
  }

  getCartListData() async {
    var tempList = await CartServices.getCartData();
    cartList.value = tempList;
  }

  // 增加数量
  void incCartNum(cartItem) {
    var temList = [];
    for (var i = 0; i < cartList.length; i++) {
      if (cartList[i]["_id"] == cartItem["_id"] &&
          cartList[i]["selectedAttr"] == cartItem["selectedAttr"]) {
        cartList[i]["count"]++;
      }
      temList.add(cartList[i]);
    }
    cartList.value = temList;
    // 改变后的数据持久化
    CartServices.setCartList(cartList);
    update();
  }

  // 减少数量
  void decCartNum(cartItem) {
    var temList = [];
    for (var i = 0; i < cartList.length; i++) {
      if (cartList[i]["_id"] == cartItem["_id"] &&
          cartList[i]["selectedAttr"] == cartItem["selectedAttr"] &&
          cartList[i]['count'] > 1) {
        cartList[i]["count"]--;
      } else {
        Get.snackbar('提示', "数量已经最少了");
      }
      temList.add(cartList[i]);
    }
    cartList.value = temList;
    // 改变后的数据持久化
    CartServices.setCartList(cartList);
    update();
  }

  // 选择商品
  void checkedCartItem(cartItem) {
    // 判定是否进行全选

    // 选择当前商品
    var temList = [];
    for (var i = 0; i < cartList.length; i++) {
      if (cartList[i]["_id"] == cartItem["_id"] &&
          cartList[i]["selectedAttr"] == cartItem["selectedAttr"]) {
        cartList[i]["checked"] = !cartList[i]["checked"];
      } else {
        Get.snackbar('提示', "数量已经最少了");
      }
      temList.add(cartList[i]);
    }
    cartList.value = temList;
    // 改变后的数据持久化
    CartServices.setCartList(cartList);
    checkedAllBox.value = !(cartList.any((v) => v['checked'] == false));
    update();
  }

  // 全选
  void checkedAll(value) {
    checkedAllBox.value = value;
    var temList = [];
    for (var i = 0; i < cartList.length; i++) {
      cartList[i]['checked'] = value;
      temList.add(cartList[i]);
    }
    cartList.value = temList;
    // 改变后的数据持久化
    CartServices.setCartList(cartList);
    update();
  }

  // 判断用户是否登录
  Future<bool> isLogin() async {
    return await UserServices.getUserLoginState();
  }

  // 判断购物车有无结算的商品
  getCheckoutData() {
    List tempList = [];
    for (var i = 0; i < cartList.length; i++) {
      if (cartList[i]['checked'] == true) {
        tempList.add(cartList[i]);
      }
    }

    return tempList;
  }

  // 结算方法
  checkout() async {
    // 获取登录状态
    bool loginState = await isLogin();
    // 获取结算的商品
    List checkoutList = getCheckoutData();
    if (loginState) {
      // 登陆了，判断购物车有无要结算的商品
      if (checkoutList.isNotEmpty) {
        // 保存结算的商品
        Storage.setData('checkoutList', checkoutList);
        // 跳转结算页面
        Get.toNamed('/checkout');
      } else {
        // 提示信息
        Get.snackbar('提示信息', "购物车中没有要结算的商品");
      }
    } else {
      // 没有登录，跳转登录页面
      Get.toNamed('/code-login-step-one');
    }
  }
}
